package com.sxj.corejava.code11_io.File;

import java.io.File;

/**
 * @author 石小俊
 * @date 2024年05月16日 18:07
 */
public class Test05_练习 {

    public static void main(String[] args) {
        try {
            remove("E:/itany", "E:/itany");
        } catch (FileNotExistException e) {
            System.err.println(e.getMessage());
        }
    }

    /**
     * 删除指定目录下所有的空目录,包括子目录下的空目录
     * @param path
     */
    public static void remove(String path, String rootPath) throws FileNotExistException {
        File file = new File(path);
        // 判断该文件是否存在
        if (!file.exists()) {
            throw new FileNotExistException("该目录不存在");
        }
        // 判断当前文件是否表示一个目录
        if (file.isDirectory()) {
            // 如果是目录,则判断是否是空目录
            if (file.listFiles().length == 0) {
                // 删除对应空目录
                System.out.println("删除空目录:" + file.getAbsolutePath());
                file.delete();
                // 当删除了空目录之后,当前目录本身也可能会成为空目录
                // 例如:一个目录中只有一个子目录,没有其他内容,且该子目录是一个空目录
                // 当删除了子目录之后,该目录也将成为一个空目录
                // 需要将当前目录也进行删除
                // 因此需要通过递归来实现
                String filePath = file.getAbsolutePath();
                // 如果当前目录是指定的当前目录,则不需要递归
                if (!rootPath.equals(filePath)) {
                    remove(file.getParentFile().getAbsolutePath(), rootPath);
                }
            } else {
                // 如果不是空目录,获取当前目录中所有的子文件
                File[] files = file.listFiles();
                for (File f : files) {
                    // 递归删除
                    remove(f.getAbsolutePath(), rootPath);
                }
            }
        }
    }
}
